import { defineStore } from 'pinia';
import { Message } from '@arco-design/web-vue';
import { menuApi } from '@/api';

export const useMenuStore = defineStore('menu', {
  state: () => ({
    menuList: [],
    userMenus: [],
    menuDetail: {},
    loading: false,
    total: 0
  }),

  actions: {
    // 获取菜单列表
    async getMenuList(params = {}) {
      console.log('MenuStore.getMenuList - 开始，参数:', params);
      this.loading = true;
      try {
        const res = await menuApi.getMenuList(params);
        console.log('MenuStore.getMenuList - 收到响应:', res);
        
        if (res.code === 0) {
          if (Array.isArray(res.data.list)) {
            console.log('MenuStore.getMenuList - 成功获取菜单列表, 数量:', res.data.list.length);
            this.menuList = res.data.list;
            this.total = res.data.total;
            return res;
          } else {
            console.error('MenuStore.getMenuList - 响应数据格式错误，预期数组但收到:', typeof res.data.list);
            Message.error('菜单数据格式错误');
            return null;
          }
        }
        
        console.error('MenuStore.getMenuList - 请求失败，响应码:', res.code, '消息:', res.message);
        Message.error(res.message || '获取菜单列表失败');
        return null;
      } catch (error) {
        console.error('MenuStore.getMenuList - 异常:', error);
        Message.error('获取菜单列表失败');
        return null;
      } finally {
        this.loading = false;
        console.log('MenuStore.getMenuList - 完成，当前状态:', { 
          menuListLength: this.menuList.length,
          total: this.total,
          loading: this.loading
        });
      }
    },

    // 获取用户菜单
    async getUserMenus(params = {}) {
      console.log('MenuStore.getUserMenus - 开始，参数:', params);
      this.loading = true;
      try {
        const res = await menuApi.getUserMenus(params);
        console.log('MenuStore.getUserMenus - 收到响应:', res);
        
        if (res.code === 0) {
          if (Array.isArray(res.data.list)) {
            console.log('MenuStore.getUserMenus - 成功获取用户菜单, 数量:', res.data.list.length);
            this.userMenus = res.data.list;
            return res;
          } else {
            console.error('MenuStore.getUserMenus - 响应数据格式错误，预期数组但收到:', typeof res.data.list);
            Message.error('用户菜单数据格式错误');
            return null;
          }
        }
        
        console.error('MenuStore.getUserMenus - 请求失败，响应码:', res.code, '消息:', res.message);
        Message.error(res.message || '获取用户菜单失败');
        return null;
      } catch (error) {
        console.error('MenuStore.getUserMenus - 异常:', error);
        Message.error('获取用户菜单失败');
        return null;
      } finally {
        this.loading = false;
        console.log('MenuStore.getUserMenus - 完成，当前状态:', { 
          userMenusLength: this.userMenus.length,
          loading: this.loading
        });
      }
    },

    // 获取菜单详情
    async getMenuDetail(id) {
      console.log('MenuStore.getMenuDetail - 开始，ID:', id);
      this.loading = true;
      try {
        const res = await menuApi.getMenuDetail(id);
        console.log('MenuStore.getMenuDetail - 收到响应:', res);
        
        if (res.code === 0) {
          console.log('MenuStore.getMenuDetail - 成功获取菜单详情');
          this.menuDetail = res.data;
          return res;
        }
        
        console.error('MenuStore.getMenuDetail - 请求失败，响应码:', res.code, '消息:', res.message);
        Message.error(res.message || '获取菜单详情失败');
        return null;
      } catch (error) {
        console.error('MenuStore.getMenuDetail - 异常:', error);
        Message.error('获取菜单详情失败');
        return null;
      } finally {
        this.loading = false;
        console.log('MenuStore.getMenuDetail - 完成，当前状态:', { 
          hasMenuDetail: !!Object.keys(this.menuDetail).length,
          loading: this.loading
        });
      }
    },

    // 创建菜单
    async createMenu(data) {
      console.log('MenuStore.createMenu - 开始，数据:', data);
      this.loading = true;
      try {
        const res = await menuApi.createMenu(data);
        console.log('MenuStore.createMenu - 收到响应:', res);
        
        if (res.code === 0) {
          console.log('MenuStore.createMenu - 成功创建菜单');
          Message.success('创建菜单成功');
          return res;
        }
        
        console.error('MenuStore.createMenu - 请求失败，响应码:', res.code, '消息:', res.message);
        Message.error(res.message || '创建菜单失败');
        return null;
      } catch (error) {
        console.error('MenuStore.createMenu - 异常:', error);
        Message.error('创建菜单失败');
        return null;
      } finally {
        this.loading = false;
        console.log('MenuStore.createMenu - 完成，loading:', this.loading);
      }
    },

    // 更新菜单
    async updateMenu(id, data) {
      console.log('MenuStore.updateMenu - 开始，ID:', id, '数据:', data);
      this.loading = true;
      try {
        const res = await menuApi.updateMenu(id, data);
        console.log('MenuStore.updateMenu - 收到响应:', res);
        
        if (res.code === 0) {
          console.log('MenuStore.updateMenu - 成功更新菜单');
          Message.success('更新菜单成功');
          return res;
        }
        
        console.error('MenuStore.updateMenu - 请求失败，响应码:', res.code, '消息:', res.message);
        Message.error(res.message || '更新菜单失败');
        return null;
      } catch (error) {
        console.error('MenuStore.updateMenu - 异常:', error);
        Message.error('更新菜单失败');
        return null;
      } finally {
        this.loading = false;
        console.log('MenuStore.updateMenu - 完成，loading:', this.loading);
      }
    },

    // 删除菜单
    async deleteMenu(id) {
      console.log('MenuStore.deleteMenu - 开始，ID:', id);
      this.loading = true;
      try {
        const res = await menuApi.deleteMenu(id);
        console.log('MenuStore.deleteMenu - 收到响应:', res);
        
        if (res.code === 0) {
          console.log('MenuStore.deleteMenu - 成功删除菜单');
          Message.success('删除菜单成功');
          return res;
        }
        
        console.error('MenuStore.deleteMenu - 请求失败，响应码:', res.code, '消息:', res.message);
        Message.error(res.message || '删除菜单失败');
        return null;
      } catch (error) {
        console.error('MenuStore.deleteMenu - 异常:', error);
        Message.error('删除菜单失败');
        return null;
      } finally {
        this.loading = false;
        console.log('MenuStore.deleteMenu - 完成，loading:', this.loading);
      }
    }
  }
}); 